/*!
 * 文件名称： bsp_spi.c
 * 描    述： bsp spi驱动文件
 * 版本：     2023-12-03, V1.0
*/

/*
* GD32F303东方红开发板V1.0
* 淘宝商城：   https://juwo.taobao.com
* 技术交流：   https://www.gd32bbs.com/ask/
* 视频学习：   https://space.bilibili.com/475462605
* 微信公众号： gd32bbs
* Copyright    苏州聚沃电子科技有限公司
* 版权所有，盗版必究。
*/

#include "bsp_spi.h"


//定义BOARD_SPI
SPI_MASTER_SCK_GPIO_DEF(BOARD_SPI,B,3,NULL);
SPI_MASTER_MOSI_GPIO_DEF(BOARD_SPI,B,5,NULL);
SPI_MASTER_MISO_GPIO_DEF(BOARD_SPI,B,4,NULL);
SPI_MASTER_CS_GPIO_DEF(BOARD_SPI,G,14);

SPI_TX_DMA_DEF(BOARD_SPI,DMA1,DMA_CH1);
SPI_RX_DMA_DEF(BOARD_SPI,DMA1,DMA_CH0);
SPI_DEF(BOARD_SPI,SPI2,SPI_MASTER,SPI_FRAMESIZE_8BIT,SPI_CK_PL_LOW_PH_1EDGE,SPI_PSC_16,SPI_ENDIAN_MSB,MODE_POLL);


//定义MODULE_SPI
SPI_MASTER_SCK_GPIO_DEF(MODULE_SPI,B,13,NULL);
SPI_MASTER_MOSI_GPIO_DEF(MODULE_SPI,B,15,NULL);
SPI_MASTER_MISO_GPIO_DEF(MODULE_SPI,B,14,NULL);
SPI_MASTER_CS_GPIO_DEF(MODULE_SPI,B,12);

SPI_TX_DMA_DEF(MODULE_SPI,DMA0,DMA_CH4);
SPI_RX_DMA_DEF(MODULE_SPI,DMA0,DMA_CH3);
SPI_DEF(MODULE_SPI,SPI1,SPI_MASTER,SPI_FRAMESIZE_8BIT,SPI_CK_PL_LOW_PH_1EDGE,SPI_PSC_16,SPI_ENDIAN_MSB,MODE_POLL);

const void* SPI_INIT_GROUP[]={&BOARD_SPI,&MODULE_SPI}; 

#define SPI_INIT_SIZE  sizeof(SPI_INIT_GROUP)/sizeof(void*)
    
//多从机管理
spi_device_union spi_device=
{
    .spi_device_state=0,
};
    

/*!
* 说明     SPI初始化函数
* 输入[1]  spix：spix结构体指针 @BOARD_SPI/MODULE_SPI
* 返回值   无
*/
void bsp_spi_init(typdef_spi_struct *spix)
{
    driver_spi_init(spix);
}

/*!
* 说明     初始化所有注册的spi
* 输入[1]  无
* 返回值   无
*/
void bsp_spi_group_init(void)
{
    uint8_t i;
    for(i=0;i<SPI_INIT_SIZE;i++)
    {
        bsp_spi_init(((typdef_spi_struct *)SPI_INIT_GROUP[i]));    
    }
}

/*!
* 说明     等待SPI空闲
* 输入[1]  无
* 返回值   无
*/
void bsp_spi_device_busy_wait(void)
{
    while(spi_device.spi_device_state!=0);
}


